package version;

import javax.imageio.stream.ImageInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.sql.*;
import java.util.Properties;

import static java.time.chrono.JapaneseEra.values;

/**
 * 封装
 * Mysql封装工具类：链接对应数据库
 * 1.Mysql与Oracle具备：url、username,password
 * 所有数据库公用的定义为属性
 * 2.getParam(String 路径)获取参数方法：链接成功数据库操作
 *   2.1 外置文件【url、账号、密码】 统一配置文件中【形式：键值对】
 *       db_mysql.properties  对应 Java Properties类读取文件键和值
 *
 */
public class Mysql {
    //1.定义数据库基本属性：私有化静态属性    类直接调取属性
    private static String url;
    private static String username;
    private static String password;
    //2.定义方法：链接成功数据库   文件路径传入
    public static void getParam(String fileName) throws IOException {
        //2.1 db_mysql.properties文件 Properties类读取文件键和值
        Properties p=new Properties();
        //2.1【补充2】低级流--搬运数据--传入fileName
        //Mysql.class  表示当前Mysql类的Class对象
        //理解：图书馆---mysql书籍区域---找管理员
        //getClassLoader()   获取当前类的加载器【加载器:根据路径执行配置文件】
        //理解：图书馆---mysql书籍区域---找管理员---找到对应【db_mysql.properties】书籍
        //getResourceAsStream()  通过类的加载器，找到对应的文件，配合读取
        InputStream fis=
        Mysql.class.getClassLoader().getResourceAsStream(fileName);
        //2.1【补充1】Properties类提供load()方法：必须传入流--低级流--搬运数据
        p.load(fis);
        //2.2从db_mysql.properties读取的键值对信息【url、用户、密码】
        //Properties类提供的方法getProperty("键")通过键找值
        //赋值给当前Mysql的数据库基本信息【url、用户、密码】
        url=p.getProperty("url");
        username=p.getProperty("username");
        password=p.getProperty("password");
        //2.3打桩 测试是否连接成功
        System.out.println("数据库基本信息："+url+username+password);
    }
    //3.测试工具类--链接成功数据库【外置文件--配置Mysql基本信息】
    public static void main(String[] args) throws IOException, SQLException {
        Mysql.getParam("db_mysql.properties");
        //作业2：参考Mysql工具类-编写Oracle工具类   10分钟
        //目的：工具类--链接成功不同的数据库【外置文件基本信息配置不同】
        //作业3：【增加条件---mi库--book】  查询
        //JDBC:Connection、Statement |      ResultSet
        //1.创建数据库链接操作
        Connection con=
                DriverManager.getConnection(url,username,password);
        //2.执行sql--创建成功数据库
        String sql=
                "insert into book values(6,'余华','活着',35,'2023年7月',90,'否')";
        Statement st=con.createStatement();
        //增删改  exuteUpdate() 返回成功几条记录
        int rows=st.executeUpdate(sql);
        System.out.println("book表添加了"+rows+"条记录");
        //ResultSet结果集保存表中所有数据
        ResultSet rs=st.executeQuery(sql);
        while(rs.next()){ //依次取出数据库中 book表所有字段：7个
            // 显示字段下记录
            //getInt() 取出数据库中 int类型的字段
            // mysql  int类型   java int类型
            int id=rs.getInt("id");
            // mysql varchar类型 java String类型
            String author=rs.getString("author");
            String name=rs.getString("name");
            int price=rs.getInt("price");
            String date=rs.getString("date");
            int number=rs.getInt("number");
            String discount=rs.getString("discount");
            //打桩：显示多少作者
            System.out.println(author);
        }
    }
}
















